package com.cskaoyan._02objectandclass._02use;

/**
 * @description:
 * @author: 景天
 * @date: 2023/2/3 9:46
 **/
/*
请大家思考一个问题：

如果不创建对象，能够直接访问类中的成员变量和成员方法吗？
很明显是不可以的

注意:

1. 无论成员变量还是成员方法，都是属于对象的！必须创建对象才能访问它们！

2. 实际上不同对象，访问类中同一个成员变量和成员方法的结果完全可能是不同的！！


创建对象与使用

创建对象:
    之前使用过Scanner scanner  = new Scanner();
    语法:
        类名 对象名= new 类名();
        解释说明:
            类名表示出来的对象是什么类型的, 类名=左右两边保持一致
            对象名, 是引用数据类型的引用,指向堆上的具体的对象
            new关键字表示在堆上开辟空间,创建对象
            命名规范: 小驼峰
            一般来说,创建对象都是在方法中进行的
            2条new语句意味着创建2个对象,地址是不一样的

对象的使用:
    1.打印对象名---->得到的是这个对象的地址值
        com.cskaoyan._02objectandclass._02use.Student@1b6d3586
        全类名+地址值
    2.可以使用==比较运算符去比较,引用数据类型比较的是地址值
    3.使用对象名.成员变量名去访问成员变量的内容,或者修改其内容
    4.使用对象.成员方法名(实参列表),进行方法的调用


 */
public class Demo {
    public static void main(String[] args) {
        // 创建学生对象
        Student student = new Student();
        Student student2 = new Student();
        System.out.println(student);
        System.out.println(student2);
        System.out.println(student == student2);// false

        // 对象名.成员变量名去访问
        System.out.println("student.age = " + student.age);//0
        System.out.println("student.name = " + student.name);//null

        // 修改成员变量的值
        // 通过对象名.成员变量名修改值的时候是在原来默认值的基础上进行覆盖
        student.age = 20;
        student.name = "张三";
        System.out.println("student.age = " + student.age);
        System.out.println("student.name = " + student.name);

        // 调用成员方法, 通过对象名.成员方法名()
        student.study();
        student.study("Java");

    }
}
// 定义一个学生类
class Student {
    // 成员变量
    // 数据类型 变量名
    String name;
    int age;

    // 成员方法
    // 没有static修饰
    public void study() {
        System.out.println("热爱学习!");
    }

    public void study(String course) {
        System.out.println("热爱学习!喜欢学" + course);
    }
}